package Gestor;

import hibernatenormal.HibernateUtil;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class GestorConexiones {

    protected GestorConexiones(String servidor)
            throws ClassNotFoundException,
            IllegalAccessException,
            InstantiationException {
        URL_servidor = (servidor != null) ? servidor : SERVIDOR_POR_DEFECTO;
        Class.forName(MANEJADOR_DB).newInstance();

    }

    protected GestorConexiones()
            throws ClassNotFoundException,
            IllegalAccessException,
            InstantiationException {

    }

    public static GestorConexiones obtenerInstancia(String servidor)
            throws ClassNotFoundException,
            IllegalAccessException,
            InstantiationException {
        if (instancia == null) {
            instancia = new GestorConexiones(servidor);
        }
        return instancia;
    }

    public static GestorConexiones obtenerInstancia()
            throws ClassNotFoundException,
            IllegalAccessException,
            InstantiationException {
        if (instancia == null) {
            instancia = new GestorConexiones();
        }
        return instancia;
    }

    public Connection obtenerConexion(String baseDatos,
            String usuario, String claveAcceso)
            throws SQLException {
        cerrarConexion();
        String URL_conexion
                = String.format("%s//%s/%s", PROTOCOLO, URL_servidor, baseDatos);

        cnx = DriverManager.getConnection(URL_conexion, usuario, claveAcceso);
        return cnx;
    }

    //Obtiene lo s datos de la conexion usado el archivo de configuracion de hibernate
    public Connection obtenerConexionHibernate()
            throws SQLException {
        cerrarConexion();
        /*    File config = new File("src/hibernate.cfg.xml");
         Configuration configuration = new Configuration().configure(getConfigurationFile());
         String url = configuration.getProperty("hibernate.connection.url");
         String URL_conexion_hibernate=new Configuration().getProperties().getProperty("hibernate.connection.url");
         System.out.println(URL_conexion_hibernate);
         String usuario_hibernate=new Configuration().getProperty("hibernate.connection.username");
         System.out.println(usuario_hibernate);
         String contrasenna_hibernate=new Configuration().getProperty("hibernate.connection.password");*/

        cnx = DriverManager.getConnection(HibernateUtil.getURL_conexion(),
                HibernateUtil.getUsuario_conexion(), HibernateUtil.getContrasenna_conexion());
        return cnx;
    }

    public void cerrarConexion() {
        if (cnx != null) {
            try {
                cnx.close();
            } catch (SQLException e) {
                e.printStackTrace(System.err);
            }
        }
    }

    /*  @Override
     public String toString() {
     StringBuilder r = new StringBuilder();
     r.append("Servidor de base de datos en: ");
     r.append(URL_servidor);
     return r.toString();
     }*/
    private static GestorConexiones instancia = null;
    private String URL_servidor = null;
    private Connection cnx = null;
    private static final String MANEJADOR_DB = "com.mysql.jdbc.Driver";
    private static final String PROTOCOLO = "jdbc:mysql:";
    private static final String SERVIDOR_POR_DEFECTO = "localhost";
}
